# '''
# 写⼀个脚本，允许⽤户按以下⽅式执⾏时，即可以对指定⽂件内容进⾏全局替换，且替换完毕后打印替
# 换了多少处内容
# '''
# import sys
#
# # 获取命令行参数列表
# args = sys.argv
#
# # args[0]为脚本本身的名称
# # args[1:]为脚本后面跟随的参数列表
# # 在命令行中使用命令 python script.py arg1 arg2 arg3 来运行脚本并传递参数
#
# # 例子: python script.py hello world
# # args[0]为'script.py'
# # args[1]为'hello'
# old_str = args[1] # 第一个是旧内容
# new_str = args[2] # 第二个是新内容
# filename = args[3] # 文件名称
#
# count = 0 # 替换计数
# f = open(filename,'r', encoding='utf-8')
# f_new = open("替换后的内容.txt",'w', encoding='utf-8')
# for line in f:
#     if old_str in line:
#         new_line = line.replace(old_str, new_str)
#         count += 1
#     else:
#         new_line = line
#     f_new.write(new_line)
# f.close()
# f_new.close()
# print(f'完成了{count}处替换。')

# '''
# 2.11 练习题- ⽤户登录认证程序
# 要求⽤户输⼊帐号密码进⾏登陆
# ⽤户账号信息保存在⽂件内
# ⽤户密码输⼊错误三次后锁定⽤户，下次再登录，检测到是这个被锁定的⽤户，则依然不允许其它
# 登录，提示已被锁
# '''
# import os
#
# user_dict = {}  # 用户名及密码
# file_user_password = '账号密码.txt'
# f = open(file=file_user_password, mode='r', encoding='utf=8')
# for line in f:
#     line = line.rstrip('\n').split(',')  # 去掉换行符的操作
#     username, password, status = line
#     user = {'密码': password, '状态': status}  # 将密码和状态存到字典里
#     user_dict[username] = user  # key：用户名,value：用户信息，将文件里的所有用户信息都填起来
# f.close()
#
# name = input('请输入用户名:')
# if name in user_dict:  # 用户名存在
#     if user_dict[name]['状态'] != '正常':  # 用户状态不正常
#         print('用户已锁定，请联系管理员解锁!')
#     else:  # 用户状态正常
#         fail_count = 0  # 用户密码错误次数
#         while fail_count < 3:
#             mima = input('请输入密码，你有3次输入正确密码的机会:')
#             if mima != user_dict[name]['密码']:  # 如果密码不相等
#                 fail_count += 1
#                 print(f'密码错误，你还有{3 - fail_count}次机会，若再错误，则账号会被锁定!')
#             else:
#                 print('登录成功!')  # 提示成功，并登录
#                 break
#
#         if fail_count == 3:  # 如果错误状次数到3次，则提示账号被锁了
#             print('用户已锁定，请联系管理员解锁')
#             user_dict[name]['状态'] = '锁定'  # 修改用户的状态为锁定
#             os.remove(file_user_password)  # 先删除原来的账号密码文件
#             f = open(file=file_user_password, mode='w', encoding='utf-8')  # 直接覆盖当前的文件
#             for username, user_info in user_dict.items():
#                 f.write(f'{username},{user_info["密码"]},{user_info["状态"]}\n')
#             f.close()
#
# else:  # 用户名不存在，弹出错误提示
#     print('不好意思，你输入的用户名不存在')

'''
1. 程序启动后，给⽤户提供查询接⼝，允许⽤户᯿复查股票⾏情信息(⽤到循环)
2. 允许⽤户通过模糊查询股票名，⽐如输⼊“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
3. 允许按股票价格、涨跌幅、换⼿率这⼏列来筛选信息，⽐如输⼊“价格>50”则把价格⼤于50的股票
都打印，输⼊“市盈率<50“，则把市盈率⼩于50的股票都打印，不⽤判断等于。
思路提示：加载⽂件内容到内存，转成dict or list结构，然后对dict or list 进⾏查询等操作。 这样以后
就不⽤每查⼀次就要打开⼀次⽂件了，效率会⾼。
'''
# 一次性读取文件内容，把文件内容读取到列表中
import re

f = open('stock_data.txt', 'r', encoding='utf-8')
# stock_list = []  # 需要存入股票信息的数据列表
# for line in f:
#     line = line.rstrip('\n').split(',')  # 去掉换行符的操作
#     # 将股票的信息存入到stock_dict中

# 列表生成式
stock_list = [line.rstrip('\n').split(',') for line in f] # 列表生成式
f.close()
# 改造stock_list,添加序号
for i in range(len(stock_list)):
    if i == 0:
        stock_list[i].insert(0, '序号')  # 第一行是表头，插入内容：序号
    else:
        stock_list[i].insert(0, str(i))  # 其他插入当前index

# print(stock_list)
continue_flag = True
while continue_flag:
    result_list = []  # 查询结果
    search_content = input("股票查询接⼝（请输入你要查找的内容）>>:")
    pattern = r'^(.*?(?:当前价|涨跌幅|换手率))'  # 需要查询的条件
    matches = re.findall(pattern, search_content)  # 进行筛选条件的匹配
    if matches:  # 匹配，则根据筛选条件进行查询
        # 第4列：当前价，第6列：涨跌幅，第10列：换手率
        if search_content[0:3] == '当前价':  # 根据当前价查询
            # 大于
            if search_content[3] == '>':
                result_list = [stock_list[i] for i in range(1, len(stock_list)) if
                               float(stock_list[i][3]) > float(search_content[4:])]
            # 小于
            if search_content[3] == '<':
                result_list = [stock_list[i] for i in range(1, len(stock_list)) if
                               float(stock_list[i][3]) < float(search_content[4:])]

        elif search_content[0:3] == '涨跌幅':  # 根据涨跌幅查询
            # 大于
            if search_content[3] == '>':
                result_list = [stock_list[i] for i in range(1, len(stock_list)) if
                               float(stock_list[i][5].lstrip('+').rstrip('%')) > float(search_content[4:])]
            # 小于
            if search_content[3] == '<':
                result_list = [stock_list[i] for i in range(1, len(stock_list)) if
                               float(stock_list[i][5].lstrip('+').rstrip('%')) < float(search_content[4:])]

        elif search_content[0:3] == '换手率':  # 根据换手率查询
            # 大于
            if search_content[3] == '>':
                result_list = [stock_list[i] for i in range(1, len(stock_list)) if
                               float(stock_list[i][9].rstrip('%')) > float(search_content[4:])]
            # 小于
            if search_content[3] == '<':
                result_list = [stock_list[i] for i in range(1, len(stock_list)) if
                               float(stock_list[i][9].rstrip('%')) < float(search_content[4:])]

    else:  # 直接根据股票名称进行查询
        result_list = [stock for stock in stock_list if search_content in stock[2]]

    result_list.insert(0, stock_list[0])

    # 输出结果
    for result in result_list:
        print(result)
    flag = input('请问是否需要继续查询(yes or no):')
    if flag == 'yes':
        continue
    else:
        exit('本次查询结束。')
